{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os,sys,inspect\n",
    "currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))\n",
    "parentdir = os.path.dirname(currentdir)\n",
    "sys.path.insert(0,parentdir) \n",
    "\n",
    "from importlib import reload \n",
    "import torch\n",
    "import fasttext\n",
    "from ptb import lang_util\n",
    "import tensorflow as tf\n",
    "import torch\n",
    "from torch.nn import CrossEntropyLoss, NLLLoss\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import rsm_samplers\n",
    "import rsm\n",
    "from ptb import lang_util\n",
    "import rsm_experiment\n",
    "reload(rsm_samplers)\n",
    "reload(rsm)\n",
    "reload(lang_util)\n",
    "reload(rsm_experiment)\n",
    "\n",
    "CONFIG = {\n",
    "    'debug': False,\n",
    "    'path': \"/Users/jgordon/nta/results\",\n",
    "    'data_dir': \"/Users/jgordon/nta/datasets\",\n",
    "    'dataset': 'ptb',\n",
    "    'predictor_hidden_size': 1200,\n",
    "    'predictor_output_size': 10000,\n",
    "    'batch_size': 300,\n",
    "    'batches_in_epoch': 2000,\n",
    "    'batches_in_first_epoch': 2,\n",
    "    'batch_log_interval': 2000,\n",
    "    'vocab_size': 10000,\n",
    "    'eval_interval': 3,\n",
    "    'eval_batch_size': 100,\n",
    "    'eval_batches_in_epoch': 824, #8243,\n",
    "    'learning_rate': 0.0005,\n",
    "    'm_groups': 1500,\n",
    "    'n_cells_per_group': 1,\n",
    "    'k_winners': 80,\n",
    "    'k_winner_cells': 1,\n",
    "    'pred_l2_reg': 0.000001,\n",
    "    'dec_l2_reg': 0.000001,\n",
    "    'input_bias': True,\n",
    "    'eval_interval': 5,\n",
    "    'eps': 0.5,\n",
    "    'gamma': 0.0,\n",
    "    'forget_mu': 0.025,\n",
    "    'weight_sparsity': None,\n",
    "    'mult_integration': False,\n",
    "    'fpartition': None,\n",
    "    'boost_strength': 0.5,\n",
    "    'boost_strength_factor': 0.85,\n",
    "    'boost_strat': 'col_boosting',\n",
    "    'do_inhibition': False,\n",
    "    'x_b_norm': True,\n",
    "    'balance_part_winners': True,\n",
    "    'decode_activation_fn': None,\n",
    "    'decode_bias': False,\n",
    "    'embed_dim': 100,\n",
    "    'input_size': (1, 100),\n",
    "    'output_size': 100,\n",
    "    'embedding_kind': 'ptb_fasttext_e5',\n",
    "    'max_decay': 0.95,\n",
    "    'mem_floor': 0.0005,\n",
    "    'trainable_decay': True,\n",
    "    'word_cache_decay': 0.99\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Adj RSM entropy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "\n",
    "def max_entropy(n, k):\n",
    "    \"\"\"The maximum entropy we could get with n units and k winners.\"\"\"\n",
    "    s = float(k) / n\n",
    "    if 0.0 < s < 1.0:\n",
    "        entropy = -s * math.log(s, 2) - (1 - s) * math.log(1 - s, 2)\n",
    "    else:\n",
    "        entropy = 0\n",
    "\n",
    "    return n * entropy\n",
    "\n",
    "def binary_entropy(x):\n",
    "    \"\"\"Calculate entropy for a list of binary random variables.\n",
    "\n",
    "    :param x: (torch tensor) the probability of the variable to be 1.\n",
    "    :return: entropy: (torch tensor) entropy, sum(entropy)\n",
    "    \"\"\"\n",
    "    entropy = -x * x.log2() - (1 - x) * (1 - x).log2()\n",
    "    entropy[x * (1 - x) == 0] = 0\n",
    "    return entropy, entropy.sum()\n",
    "\n",
    "def update_duty_cycle(duty_cycle, learning_iterations, x):\n",
    "    batch_size = x.shape[0]\n",
    "    learning_iterations += batch_size\n",
    "    period = min(1000, learning_iterations)\n",
    "    duty_cycle.mul_(period - batch_size)\n",
    "    duty_cycle.add_(x.gt(0).sum(dim=0, dtype=torch.float))\n",
    "    duty_cycle.div_(period)\n",
    "\n",
    "def forward_and_get_entropy(exp, loader, bsz):\n",
    "    exp.model.train() \n",
    "    tc = exp.m_groups * exp.n_cells_per_group\n",
    "    k = exp.k_winners\n",
    "    duty_cycle = torch.zeros(tc)\n",
    "    learning_iterations = 0\n",
    "    with torch.no_grad():\n",
    "        hidden = exp._init_hidden(bsz)\n",
    "        for _b_idx, (inputs, targets, pred_targets, input_labels) in enumerate(loader):\n",
    "            inputs = inputs.to(exp.device)\n",
    "            targets = targets.to(exp.device)\n",
    "            pred_targets = pred_targets.to(exp.device)\n",
    "            input_labels = input_labels.to(exp.device)\n",
    "\n",
    "            output, hidden = exp.model(inputs, hidden)\n",
    "            \n",
    "            update_duty_cycle(duty_cycle, learning_iterations, exp.model.RSM_1.col_winners.squeeze())\n",
    "    \n",
    "    _, ent = binary_entropy(duty_cycle)\n",
    "    max_ent = max_entropy(tc, k)\n",
    "    \n",
    "#     e = exp.model.RSM_1.kwinners_col.entropy()\n",
    "#     max_e = exp.model.RSM_1.kwinners_col.max_entropy()\n",
    "    print(\"Adj RSM: entropy / max entropy: %.3f/%.3f\" % (ent, max_e))\n",
    "    return ent"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "setup: Using cpu\n",
      "Maybe download PTB...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loaded embedding dict (ptb_fasttext_e5) with 10000 entries\n",
      "Built dataloaders...\n",
      "Loading from /Users/jgordon/Desktop/rsm_highlights/PTB/RSMTune_0_2019-09-20_21-15-18mchjovgl/checkpoint_112\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/jgordon/miniconda3/envs/standard/lib/python3.7/site-packages/torch/serialization.py:454: SourceChangeWarning: source code of class 'rsm.RSMNet' has changed. you can retrieve the original source code by accessing the object's source attribute or set `torch.nn.Module.dump_patches = True` and use the patch tool to revert the changes.\n",
      "  warnings.warn(msg, SourceChangeWarning)\n",
      "/Users/jgordon/miniconda3/envs/standard/lib/python3.7/site-packages/torch/serialization.py:454: SourceChangeWarning: source code of class 'rsm.RSMLayer' has changed. you can retrieve the original source code by accessing the object's source attribute or set `torch.nn.Module.dump_patches = True` and use the patch tool to revert the changes.\n",
      "  warnings.warn(msg, SourceChangeWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train...\n"
     ]
    },
    {
     "ename": "AttributeError",
     "evalue": "'RSMLayer' object has no attribute 'learning_iterations'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-5-ab4859e0afa8>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Train...\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0me_boost_train\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mforward_and_get_entropy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain_loader\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m300\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      7\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Test...\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      8\u001b[0m \u001b[0me_boost_test\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mforward_and_get_entropy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mval_loader\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-4-999d56e714e2>\u001b[0m in \u001b[0;36mforward_and_get_entropy\u001b[0;34m(exp, loader, bsz)\u001b[0m\n\u001b[1;32m     43\u001b[0m             \u001b[0minput_labels\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minput_labels\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     44\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 45\u001b[0;31m             \u001b[0moutput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhidden\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mexp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhidden\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     46\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     47\u001b[0m             \u001b[0mupdate_duty_cycle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mduty_cycle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlearning_iterations\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mRSM_1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcol_winners\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/miniconda3/envs/standard/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m    491\u001b[0m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slow_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    492\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 493\u001b[0;31m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    494\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    495\u001b[0m             \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/nta/nupic.research/projects/rsm/rsm.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, x_a_batch, hidden)\u001b[0m\n\u001b[1;32m    191\u001b[0m             \u001b[0mhidden_in\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mlay_x_b\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlay_x_above\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlay_phi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlay_psi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    192\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 193\u001b[0;31m             \u001b[0mpred_output\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhidden\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlayer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlayer_input\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhidden_in\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    194\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    195\u001b[0m             \u001b[0;31m# If layers > 1, higher layers predict lower layer's phi (TOOD: or should be x_b?)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/miniconda3/envs/standard/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m    491\u001b[0m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_slow_forward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    492\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 493\u001b[0;31m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    494\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    495\u001b[0m             \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/nta/nupic.research/projects/rsm/rsm.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, x_a_batch, hidden)\u001b[0m\n\u001b[1;32m    760\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_debug_log\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m\"sigma\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0msigma\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    761\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 762\u001b[0;31m         \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_inhibited_winners\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mphi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    763\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    764\u001b[0m         \u001b[0mphi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpsi\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_memory_and_inhibition\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mphi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpsi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx_b\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mx_b_in\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/nta/nupic.research/projects/rsm/rsm.py\u001b[0m in \u001b[0;36m_inhibited_winners\u001b[0;34m(self, sigma, phi)\u001b[0m\n\u001b[1;32m    704\u001b[0m         \u001b[0mpi\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdetach\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# Prevent gradients from flowing through inhibition/masking\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    705\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 706\u001b[0;31m         \u001b[0my_pre_act\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_k_winners\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    707\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    708\u001b[0m         \u001b[0mactivation\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mRSMLayer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mACT_FNS\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mactivation_fn\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/nta/nupic.research/projects/rsm/rsm.py\u001b[0m in \u001b[0;36m_k_winners\u001b[0;34m(self, sigma, pi)\u001b[0m\n\u001b[1;32m    685\u001b[0m             \u001b[0my_pre_act\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mm_pi\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mm_lambda\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0msigma\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    686\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 687\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_duty_cycle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcol_winners\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    688\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    689\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/nta/nupic.research/projects/rsm/rsm.py\u001b[0m in \u001b[0;36m_update_duty_cycle\u001b[0;34m(self, winners)\u001b[0m\n\u001b[1;32m    617\u001b[0m         '''\n\u001b[1;32m    618\u001b[0m         \u001b[0mbatch_size\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwinners\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 619\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlearning_iterations\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    620\u001b[0m         \u001b[0mperiod\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlearning_iterations\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    621\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mduty_cycle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmul_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mperiod\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/miniconda3/envs/standard/lib/python3.7/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__getattr__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m    537\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mmodules\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    538\u001b[0m         raise AttributeError(\"'{}' object has no attribute '{}'\".format(\n\u001b[0;32m--> 539\u001b[0;31m             type(self).__name__, name))\n\u001b[0m\u001b[1;32m    540\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    541\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__setattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mAttributeError\u001b[0m: 'RSMLayer' object has no attribute 'learning_iterations'"
     ]
    }
   ],
   "source": [
    "# Load bRSM\n",
    "exp = rsm_experiment.RSMExperiment(config=CONFIG)\n",
    "exp.model_setup(CONFIG, restore_path=\"/Users/jgordon/Desktop/rsm_highlights/PTB/RSMTune_0_2019-09-20_21-15-18mchjovgl/checkpoint_112\")\n",
    "\n",
    "print(\"Train...\")\n",
    "e_boost_train = forward_and_get_entropy(exp, exp.train_loader, 300)\n",
    "print(\"Test...\")\n",
    "e_boost_test = forward_and_get_entropy(exp, exp.val_loader, 100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load inhibited RSM\n",
    "exp = rsm_experiment.RSMExperiment(config=CONFIG)\n",
    "exp.model_setup(CONFIG, restore_path=\"/Users/jgordon/Desktop/rsm_highlights/PTB/Ablation/Flat_PTB_Abl_Inh/RSMTune_0_2019-09-22_22-35-225sg3eimn/checkpoint_102\")\n",
    "\n",
    "print(\"Train...\")\n",
    "e_inh_train = forward_and_get_entropy(exp, exp.train_loader, 300)\n",
    "print(\"Test...\")\n",
    "e_inh_test = forward_and_get_entropy(exp, exp.val_loader, 100)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'e_inh_train' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-7-9a366e9bb6ff>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0mlabels\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'Inhibition'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Boosting'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0minh_entropies\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0me_inh_train\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0me_boost_train\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      8\u001b[0m \u001b[0mboost_entropies\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0me_inh_test\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0me_boost_test\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'e_inh_train' is not defined"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "MAX_ENT = 450.6\n",
    "\n",
    "\n",
    "labels = ['Inhibition', 'Boosting']\n",
    "inh_entropies = [e_inh_train.item(), e_boost_train.item()]\n",
    "boost_entropies = [e_inh_test.item(), e_boost_test.item()]\n",
    "\n",
    "x = np.arange(len(labels))  # the label locations\n",
    "width = 0.35  # the width of the bars\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "rects1 = ax.bar(x - width/2, inh_entropies, width, label='Train')\n",
    "rects2 = ax.bar(x + width/2, boost_entropies, width, label='Test')\n",
    "\n",
    "# Add some text for labels, title and custom x-axis tick labels, etc.\n",
    "ax.set_ylabel('Entropy (bits)')\n",
    "ax.set_title('Layer entropy comparison: inhibition vs boosting')\n",
    "ax.set_xticks(x)\n",
    "ax.set_xticklabels(labels)\n",
    "ax.plot([0, 2], [MAX_ENT, MAX_ENT], c='gray', label=\"Max entropy\")\n",
    "ax.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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ueKKK9oUFRWZ5N06PHbs2JaSNGzYsE7hx3doOzX5fZaXlxe44oor2mRnZx+bnJzcq0OHDseMHj06+/PPP6/0eIEAUB6uIAOASrrttts2T5w4sfnf/va3w0aNGrWpW7duRRWtc+211+Y899xzLZo0aVJ8zjnn5KelpZXMnj0745FHHsmZNWtWxty5c79KSUlxsbZh7NixzefNm5dx9tln55966qkF8+fPT5s0aVLWf//73/SPP/74i1atWu2/sm3OnDkNhw4d2mnXrl2BU089dVvnzp33fPXVVyn//ve/s2bOnNlkypQpXw0YMKAwVH/Lli2Bvn37dv72229TunbtWnjWWWdtzMvLqzd16tSmw4cP7/Too49+f8stt2wJ1b/++utznnvuuRY5OTl7hw4dujUjIyO4YcOG+v/73/8avfHGG5lXXXXV1iOPPLJo5MiR6ydMmNBckq666qpNofV79uy5/7XLM378+MNmzZrV5LTTTtvWr1+/HYsWLWo0derUzM8//zx1+fLln6empu6P39tvv5123nnndQoGgzrjjDO2dejQoejzzz9PPfvss4/q27fv9ljjLElffvllg/79+3fevHlz/b59++4477zz8teuXdvg7bffznz//fcz/u///u/biy++uCByvcmTJ2d+8MEHGf379y+47LLLNq9ZsyZqZ2Ss1q5d2+DEE0/s0qZNm6Lhw4fnb926NTB16tSml1122RFpaWlfDRs2bEfkOtOmTcuYOXNmk/79+2+/7LLLNq9YsSJlzpw5GYMHD260fPny5bFeAbl69erkAQMGdO7UqdPuyy67bPOGDRvqT506temFF1545AsvvPDdVVddtbWsdavz3lf2WAxZsmRJw+effz67R48euy6++OIta9eubfDOO+9kDhs27KgFCxYs7969e4WfWRwaOO457hPRjBkzGkulj5U9e/bYgAEDOn3yySdpHTp02PPzn/98c2FhYdK0adMyr7rqqo5Lly7d8Oyzz64LX6cy+ceCBQtSBwwY0MXM3GmnnVbQrl27ou3btwdWrlyZ/Oqrrx42duzYdcnJye43v/nNxilTpmR+8sknacOHD89r167d3srsX2U+14WFhda/f/9On3/+ecMuXboUDh8+PK+goCAwbty4lvPmzUurepQBIArnHBMTE1OZ08KFCxcuW7Zsl3NuYdRJcrVmKmsfYpwkuebNm+91zi188cUXv5XkhgwZsjW8TqtWrYokub179+4vmzFjxheSXIsWLYq+//77paHyvXv3Lhw0aNA2Se62225bG0sbRo4cmSvJ1atXr+TDDz9cHr7siiuu2CjJXXjhhZtDZcFgcGGHDh12S3Ljx4//Lrz+n/70p28lufbt2+8uLi7eX37xxRdvluQuvvjizcFgcH/5p59++llaWlpx/fr1S7788stPQ+UZGRnFzZs337t9+/bFke3Nzc1dGv57q1atilq1alVUXoyPO+64HdH2uVGjRsEFCxYcsM9Dhw7Nk+QmTJjwbaisuLh4Ydu2bfdIcn//+9+/Cq//6KOPfi/JSXJvvfXWilhiftJJJxVIcrfeeusB79G77777RSAQcBkZGcXbtm3bv+9PPfXUSknOzNw///nPr2J5jdA0fPjwLZJceHy//PLLT0Ntvummm9aF1580adJXklz//v23hZeH2hAIBNybb755wH7+9re/XS/J3XXXXWsq89q//vWvN4TXnzNnzueBQKAkPT29OC8vr9T+P/XUUyur+95X9lh86623VoTaG/n6jz322CpJ7tJLL91UmfckntPI6SNzNVpOo+VGTh+Ze6iWV3cKvWfhZRz3CXzcj3S5lflqHznS5R7MdcPXqYnjfuTIkbmh6Ve/+tWGXr167TAzN2jQoG35+fkHfK/efvvta0PHfniesXbt2qWh/OPdd9/9IlRe2fzjyiuv3CDJvfrqq99EtnfTpk1LwnOF0HdzWd+lNfV9NmrUqHWS3NChQ/PCPw9ff/31/5o0abJPkhs+fPiWiuK9bNmyXQsXLlzoDoHcmomJ6dCduMUSAKrgl7/85dYePXrsmjFjRpN33nmn3DOYEydObCZJN9988/q2bdvuv3Khfv36Gjdu3JqkpCT95S9/Oawyr3/++efnnXTSSQcM3PvYY4/lpqWlBf/zn/9khW6bmDlzZqOVK1em9OjRY9c111yTH17/qquu2tqrV6+dq1atSnn33XfTJO/s9OTJk5s2bNiwZOzYsWuTkn74mujWrVvRFVdcsWnfvn02YcKErPBt1atXz9WrV6/UFXA1OUbbFVdcsfH4448/YJ9//etfb5Gkjz/+eP8tRDNnzkxbvXp18gknnLDjpz/96QFXi918882b27VrF/NVFN9++239efPmNW7ZsuXe+++/f2P4siFD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sW688cbWJSUluvTSSzdX5jUnT56cNW/evNTwsltvvbXVzp07A8OGDctPTU11kjRkyJCd7du337N48eK0l1566YABpV966aXMRYsWpbVr167o9NNP3ylJKSkp7rzzzsvftWtX0s0339wqvP7y5cuT//znPzevV6+eu/LKK/Mkaffu3fbuu++WGvy5qKjItm3bVk+SGjVqtP9+iSZNmgS3bt1ab+fOnT9aJ9mQIUN2tmnTpmjBggXp//jHPxqHL3vyyScP+/7772MeT+Xwww/f169fv+25ubkNHnjggezwZbNnz2701ltvZTVu3Dh46aWXRr29tq7YuXNn4Pbbbz/geJg7d27Df//7303T0tJi2v/KvveVPRaBmsZxj3h59dVXm6xbt65BvXr13KBBg/aPs3XJJZdscc5p5MiRrYuLf7i7cP369fUef/zxVtIPOUf4z7HmHzNmzGgU7VgNXUUdPnh/6LbHVatWleq4qkk//elP80pKSjRq1Kic8Nsvv/nmm/p/+tOfsstZFQAqjctSAaCasrOzgzfccMP6Bx98MOpg/UOGDNl19dVXb3jhhRdadOvW7Zizzjpra6NGjUpmz57d+Ouvv07t1avXzvvuu69ST2Lq379/weDBgzufddZZW1u0aLFv/vz5aYsXL05r1arV3nHjxq0N1UtKStKf//znVeecc06nK6+8suNrr722rVOnTnu+/vrrlJkzZzZp1KhRyYsvvrgy/MlU48aNW7tgwYK0V155pfnSpUsbnXzyyTvy8vLqTZ06NXPXrl2Bhx56aHXnzp33StKuXbuSzjjjjM5t27Yt6tatW2GbNm2K9uzZkzR37tzG3333Xcqpp566rVevXnvC2r192bJlDQcNGtSpX79+O5KTk12PHj0KL7nkkoJKB74MgUBA48eP/37EiBFHXnLJJUe88sor2zp06FC0fPny1Hnz5jXu379/wdy5czNCZ78rMmHChO8HDBjQ+YEHHmg9a9asxj179ixcu3Ztg7fffjvTzNxzzz23KtpA3nVJnz59dr722mvNFi1a1OiEE07YuWHDhvpTp05t6pyzMWPGfN+0adMK978q731ljkWgpnHc42C46aab9neE7tq1K2nFihUpc+fOzZCkO+64Y12bNm3294SNHj1644wZMzJmzZrVpEuXLsecdtppBYWFhUlTp07NzM/Pr3f11VdvOOOMM/Z3qFU2/3j00UdbzJ8/v3GfPn12tG3bdm9aWlrwyy+/TJ07d25G48aNg9dee+3+zrfTTz99x1133aUHHnig9bJly1JDt0M+9thjBzydsrruu+++DdOmTcucMmVK065du6YMHDhwe0FBQWDq1KlNjzvuuB0zZ85sEv50SwCoDjrIAKAG3HnnnZtefPHF5rm5uVHPpD7//PPrevbsWfjHP/6x+b/+9a+s4uJia9OmTdGtt9667t57792YkpISU2dNyMiRIzede+6528aPH589derUlNTU1OCIESPynnzyyXU5OTkHDFp76qmn7po3b97n9957b6t58+alz549OyMzM7N46NCh+ffff39u9+7dDxhEPzs7O/jxxx9/ec8997SYNm1a5oQJE7KTk5NLunXrtmvUqFEbhw8fvv+JmOnp6SV33XXX2rlz5zZetGhRoxkzZjRp2LBhsG3btkWPPvro6uuvv35L+LYffvjh9du2bQvMnDmzyZIlS9KCwaCGDx+eV5MdZJI0dOjQHW+//faKu+++u9V7772X8d5776l79+67pk6duuKVV17JksoeJDjS0Ucfvffjjz/+4u6772753nvvZXz88cfpaWlpwVNOOaXgnnvuWT9gwIA6f6tT27Zti/74xz9+f8stt+S8+uqrh+3bt8+OPvrowrvuuit3xIgRUZ+QGqkq731ljkWgpnHc42AYO3Zsy9DPgUBAmZmZ+wYNGrTt2muv3Xz++ecf8F6npKS4Dz744Kv7778/+4033sh6+eWXmwcCAde5c+fChx56aHO0QfQrk3/89re/3dykSZPgkiVLGi1atCituLjYsrOz91122WWb7rzzzo2dOnXa3zHbq1evPc8888zKp59+usWrr77avKioyKSa7yBLS0tzH3zwwYpRo0a1mjZtWubEiROzc3Jyim644Yb1AwcO3DFz5swmjMkHoKaYc5X6nwxAglm0aNHClJSULsccc8wX8W4LUBN69erV+dNPP22Un5+/pHHjxnX6yi8AAOqqJ598stmoUaPaPfbYY9/fcsstW8qru3z58i579uz5onfv3n0OVvsA1D5cjwoAqHN27NiRFG2A66effjpryZIljU466aQCOscAADj0rVq1qtRTOL/++usGTzzxRMtAIOAuvPDCGr0KHUDi4hZLAECd88033zQ48cQTj+7Xr9/2jh077ikuLrbPPvus4eLFi9PS09ODY8eOXVvxVgAAQLydd955hxcXF9uxxx5bmJGRUbx69erk2bNnZ+zZsyfpjjvuWNe+ffvSj5kGgCqggwwAUOe0bt1637nnnps3f/789AULFqTv3bvXmjVrtu+CCy7IGz169PpjjjmmqOKtAACAeLvooovyXn/99ay33367yY4dOwINGzYs6d69+65rrrlm0+WXX74t3u0DUHcwBhmAcjEGGQAAAGozxiADEAvGIAMAAAAAAEBCo4MMAAAAAFAncccUgFjRQQagIvskuWAwyN8LAAAA1ColJSVJkpykvfFuC4BDG//wAqjIdyUlJbt37tzZMN4NAQAAACpjx44djUpKSnZLWhnvtgA4tNFBBqAiM4PBYP6GDRtabNu2LT0YDCZxqToAAAAOVc45BYPBpG3btqVv3LgxOxgM5kuaGe92ATi01Yt3AwAc8l4PBoMn7t69e8CaNWuaJiUl5UiyeDcKAAAAKIcrKSnZHQwGNwaDwTmSXo93gwAc2owrQQBUZNGiRamSLpI0WFIHSQ3i2yIAAACgXHvl3VY5U9LrvXv33h3n9gA4xNFBBgAAAAAAgITGGGQAAAAAAABIaHSQAQAAAAAAIKHRQQYAAAAAAICERgcZAAAAAAAAEhodZAAAAAAAAEhodJABAAAAAAAgodFBBgAAAAAAgIRGBxkAAAAAAAAS2v8Hg70U7Ksx1V4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1440x864 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def get_event_filename(dir):\n",
    "    for path in os.listdir(dir):   \n",
    "        if 'events' in path:    \n",
    "            return dir + '/' + path\n",
    "    print(\"No event for %s\" % dir)\n",
    "    \n",
    "def get_entropy_curves(filename):\n",
    "    xaxis = []\n",
    "    train_ents = []\n",
    "    test_ents = []\n",
    "    for event in tf.compat.v1.train.summary_iterator(filename):\n",
    "        for value in event.summary.value:\n",
    "            if 'entropy' in value.tag:\n",
    "                if not xaxis or xaxis[-1] != event.step:\n",
    "                    xaxis.append(event.step)\n",
    "            if 'train_entropy' in value.tag:\n",
    "                ent = value.simple_value\n",
    "                train_ents.append(ent)\n",
    "            elif 'test_entropy' in value.tag:\n",
    "                ent = value.simple_value\n",
    "                test_ents.append(ent)\n",
    "    return xaxis, train_ents, test_ents\n",
    "\n",
    "fig, axs = plt.subplots(1, 2, dpi=144, figsize=(10, 6))\n",
    "\n",
    "axs[0].set_title(\"Train\")\n",
    "axs[1].set_title(\"Test\")\n",
    "axs[0].set_xlabel(\"Mini-batches (1000s)\")\n",
    "axs[1].set_xlabel(\"Mini-batches (1000s)\")\n",
    "axs[0].set_ylabel(\"Binary Entropy (bits)\")\n",
    "axs[1].set_ylabel(\"Binary Entropy (bits)\")\n",
    "\n",
    "labels = [\n",
    "    \"No boosting or inhibition\",\n",
    "    \"Inhibition\",\n",
    "    \"Boosting\"\n",
    "]\n",
    "\n",
    "\n",
    "\n",
    "fn = get_event_filename(\"/Users/jgordon/Desktop/rsm_highlights/PTB/Entropy/RSMTune_0_boost_strength_0_2019-10-10_20-58-14_5pr4jhk\")\n",
    "xaxis, train_ents, test_ents = get_entropy_curves(fn)\n",
    "\n",
    "l_none = axs[0].plot(xaxis, train_ents, label=\"No boosting or inhibition\", c='red')\n",
    "axs[1].plot(xaxis, test_ents, label=\"No boosting or inhibition\", c='red')\n",
    "\n",
    "fn = get_event_filename(\"/Users/jgordon/Desktop/rsm_highlights/PTB/Entropy/RSMTune_1_boost_strat_rsm_inhibition_2019-10-01_03-23-26anv1eoa5\")\n",
    "xaxis, train_ents, test_ents = get_entropy_curves(fn)\n",
    "\n",
    "l_in = axs[0].plot(xaxis, train_ents, label=\"Inhibition\", c='green', dashes=[1,1])\n",
    "axs[1].plot(xaxis, test_ents, label=\"Inhibition\", c='green', dashes=[1, 1])\n",
    "\n",
    "fn = get_event_filename(\"/Users/jgordon/Desktop/rsm_highlights/PTB/Entropy/RSMTune_0_2019-10-01_03-24-58ogm7b9bn\")\n",
    "xaxis, train_ents, test_ents = get_entropy_curves(fn)\n",
    "\n",
    "l_ns = axs[0].plot(xaxis, train_ents, c='blue', dashes=[4, 1])\n",
    "axs[1].plot(xaxis, test_ents, label=\"Boosting\", c='blue', dashes=[4, 1])\n",
    "\n",
    "plt.figlegend(l_none + l_in + l_ns, labels, loc = 'lower center', ncol=3, labelspacing=0.3 )\n",
    "plt.suptitle(\"Layer Entropy: Boosting vs Inhibition\")\n",
    "\n",
    "for ax in axs:\n",
    "    ax.spines['right'].set_visible(False)\n",
    "    ax.spines['top'].set_visible(False)\n",
    "    ax.set_ylim((250, 460))\n",
    "    ax.plot([0, 62], [MAX_ENT, MAX_ENT], c='#DDDDDD', label=\"Max entropy\", dashes=[4, 2])\n",
    "plt.savefig('Charts/entropy.png')\n",
    "plt.show()\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
